import re
import requests
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense,Dropout
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix,classification_report
import matplotlib.pyplot as plt
from sklearn import preprocessing
def load_crime_data(fileName):
r = requests.get('http://archive.ics.uci.edu/ml/machine-learning-databases/communities/communities.names')
all_columns = re.findall(r'\@attribute (\w*)', r.text)
del r
output_columns = ['ViolentCrimesPerPop']
data = pd.read_csv(fileName, names=all_columns, index_col=False)
return output_columns,all_columns,data
output_columns,all_columns,data = load_crime_data('data\communities.data')
data.head(10)
| state | county | community | communityname | fold | population | householdsize | racepctblack | racePctWhite | racePctAsian | ... | LandArea | PopDens | PctUsePubTrans | PolicCars | PolicOperBudg | LemasPctPolicOnPatr | LemasGangUnitDeploy | LemasPctOfficDrugUn | PolicBudgPerPop | ViolentCrimesPerPop | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 8 | ? | ? | Lakewoodcity | 1 | 0.19 | 0.33 | 0.02 | 0.90 | 0.12 | ... | 0.12 | 0.26 | 0.20 | 0.06 | 0.04 | 0.9 | 0.5 | 0.32 | 0.14 | 0.20 |
| 1 | 53 | ? | ? | Tukwilacity | 1 | 0.00 | 0.16 | 0.12 | 0.74 | 0.45 | ... | 0.02 | 0.12 | 0.45 | ? | ? | ? | ? | 0.00 | ? | 0.67 |
| 2 | 24 | ? | ? | Aberdeentown | 1 | 0.00 | 0.42 | 0.49 | 0.56 | 0.17 | ... | 0.01 | 0.21 | 0.02 | ? | ? | ? | ? | 0.00 | ? | 0.43 |
| 3 | 34 | 5 | 81440 | Willingborotownship | 1 | 0.04 | 0.77 | 1.00 | 0.08 | 0.12 | ... | 0.02 | 0.39 | 0.28 | ? | ? | ? | ? | 0.00 | ? | 0.12 |
| 4 | 42 | 95 | 6096 | Bethlehemtownship | 1 | 0.01 | 0.55 | 0.02 | 0.95 | 0.09 | ... | 0.04 | 0.09 | 0.02 | ? | ? | ? | ? | 0.00 | ? | 0.03 |
| 5 | 6 | ? | ? | SouthPasadenacity | 1 | 0.02 | 0.28 | 0.06 | 0.54 | 1.00 | ... | 0.01 | 0.58 | 0.10 | ? | ? | ? | ? | 0.00 | ? | 0.14 |
| 6 | 44 | 7 | 41500 | Lincolntown | 1 | 0.01 | 0.39 | 0.00 | 0.98 | 0.06 | ... | 0.05 | 0.08 | 0.06 | ? | ? | ? | ? | 0.00 | ? | 0.03 |
| 7 | 6 | ? | ? | Selmacity | 1 | 0.01 | 0.74 | 0.03 | 0.46 | 0.20 | ... | 0.01 | 0.33 | 0.00 | ? | ? | ? | ? | 0.00 | ? | 0.55 |
| 8 | 21 | ? | ? | Hendersoncity | 1 | 0.03 | 0.34 | 0.20 | 0.84 | 0.02 | ... | 0.04 | 0.17 | 0.04 | ? | ? | ? | ? | 0.00 | ? | 0.53 |
| 9 | 29 | ? | ? | Claytoncity | 1 | 0.01 | 0.40 | 0.06 | 0.87 | 0.30 | ... | 0.00 | 0.47 | 0.11 | ? | ? | ? | ? | 0.00 | ? | 0.15 |
10 rows × 128 columns
data.describe()
| state | fold | population | householdsize | racepctblack | racePctWhite | racePctAsian | racePctHisp | agePct12t21 | agePct12t29 | ... | PctForeignBorn | PctBornSameState | PctSameHouse85 | PctSameCity85 | PctSameState85 | LandArea | PopDens | PctUsePubTrans | LemasPctOfficDrugUn | ViolentCrimesPerPop | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | ... | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 | 1994.000000 |
| mean | 28.683551 | 5.493982 | 0.057593 | 0.463395 | 0.179629 | 0.753716 | 0.153681 | 0.144022 | 0.424218 | 0.493867 | ... | 0.215552 | 0.608892 | 0.535050 | 0.626424 | 0.651530 | 0.065231 | 0.232854 | 0.161685 | 0.094052 | 0.237979 |
| std | 16.397553 | 2.873694 | 0.126906 | 0.163717 | 0.253442 | 0.244039 | 0.208877 | 0.232492 | 0.155196 | 0.143564 | ... | 0.231134 | 0.204329 | 0.181352 | 0.200521 | 0.198221 | 0.109459 | 0.203092 | 0.229055 | 0.240328 | 0.232985 |
| min | 1.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | ... | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
| 25% | 12.000000 | 3.000000 | 0.010000 | 0.350000 | 0.020000 | 0.630000 | 0.040000 | 0.010000 | 0.340000 | 0.410000 | ... | 0.060000 | 0.470000 | 0.420000 | 0.520000 | 0.560000 | 0.020000 | 0.100000 | 0.020000 | 0.000000 | 0.070000 |
| 50% | 34.000000 | 5.000000 | 0.020000 | 0.440000 | 0.060000 | 0.850000 | 0.070000 | 0.040000 | 0.400000 | 0.480000 | ... | 0.130000 | 0.630000 | 0.540000 | 0.670000 | 0.700000 | 0.040000 | 0.170000 | 0.070000 | 0.000000 | 0.150000 |
| 75% | 42.000000 | 8.000000 | 0.050000 | 0.540000 | 0.230000 | 0.940000 | 0.170000 | 0.160000 | 0.470000 | 0.540000 | ... | 0.280000 | 0.777500 | 0.660000 | 0.770000 | 0.790000 | 0.070000 | 0.280000 | 0.190000 | 0.000000 | 0.330000 |
| max | 56.000000 | 10.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | ... | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
8 rows × 102 columns
# data.hist()
data.isna().sum()
state 0
county 0
community 0
communityname 0
fold 0
population 0
householdsize 0
racepctblack 0
racePctWhite 0
racePctAsian 0
racePctHisp 0
agePct12t21 0
agePct12t29 0
agePct16t24 0
agePct65up 0
numbUrban 0
pctUrban 0
medIncome 0
pctWWage 0
pctWFarmSelf 0
pctWInvInc 0
pctWSocSec 0
pctWPubAsst 0
pctWRetire 0
medFamInc 0
perCapInc 0
whitePerCap 0
blackPerCap 0
indianPerCap 0
AsianPerCap 0
..
PctSameHouse85 0
PctSameCity85 0
PctSameState85 0
LemasSwornFT 0
LemasSwFTPerPop 0
LemasSwFTFieldOps 0
LemasSwFTFieldPerPop 0
LemasTotalReq 0
LemasTotReqPerPop 0
PolicReqPerOffic 0
PolicPerPop 0
RacialMatchCommPol 0
PctPolicWhite 0
PctPolicBlack 0
PctPolicHisp 0
PctPolicAsian 0
PctPolicMinor 0
OfficAssgnDrugUnits 0
NumKindsDrugsSeiz 0
PolicAveOTWorked 0
LandArea 0
PopDens 0
PctUsePubTrans 0
PolicCars 0
PolicOperBudg 0
LemasPctPolicOnPatr 0
LemasGangUnitDeploy 0
LemasPctOfficDrugUn 0
PolicBudgPerPop 0
ViolentCrimesPerPop 0
Length: 128, dtype: int64
data = data.replace('?', np.nan)
data.isna().sum()
state 0
county 1174
community 1177
communityname 0
fold 0
population 0
householdsize 0
racepctblack 0
racePctWhite 0
racePctAsian 0
racePctHisp 0
agePct12t21 0
agePct12t29 0
agePct16t24 0
agePct65up 0
numbUrban 0
pctUrban 0
medIncome 0
pctWWage 0
pctWFarmSelf 0
pctWInvInc 0
pctWSocSec 0
pctWPubAsst 0
pctWRetire 0
medFamInc 0
perCapInc 0
whitePerCap 0
blackPerCap 0
indianPerCap 0
AsianPerCap 0
...
PctSameHouse85 0
PctSameCity85 0
PctSameState85 0
LemasSwornFT 1675
LemasSwFTPerPop 1675
LemasSwFTFieldOps 1675
LemasSwFTFieldPerPop 1675
LemasTotalReq 1675
LemasTotReqPerPop 1675
PolicReqPerOffic 1675
PolicPerPop 1675
RacialMatchCommPol 1675
PctPolicWhite 1675
PctPolicBlack 1675
PctPolicHisp 1675
PctPolicAsian 1675
PctPolicMinor 1675
OfficAssgnDrugUnits 1675
NumKindsDrugsSeiz 1675
PolicAveOTWorked 1675
LandArea 0
PopDens 0
PctUsePubTrans 0
PolicCars 1675
PolicOperBudg 1675
LemasPctPolicOnPatr 1675
LemasGangUnitDeploy 1675
LemasPctOfficDrugUn 0
PolicBudgPerPop 1675
ViolentCrimesPerPop 0
Length: 128, dtype: int64
len(data['ViolentCrimesPerPop'])
1994
for i in range(len(data['ViolentCrimesPerPop'])):
if data['ViolentCrimesPerPop'][i] > 0.1:
data['ViolentCrimesPerPop'][i] = 1 # High Crime
else:
data['ViolentCrimesPerPop'][i] = 0 # Low Crime Rate
c:\users\sahil\appdata\local\programs\python\python36\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy This is separate from the ipykernel package so we can avoid doing imports until c:\users\sahil\appdata\local\programs\python\python36\lib\site-packages\ipykernel_launcher.py:5: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy """
# Calculating the percentage of positive and negative instances in the dataset
percentage_intances = data.groupby('ViolentCrimesPerPop').size() * 100 / len(data)
print(percentage_intances)
print("------------------")
print("Percentage Positive Instance = {}\nPercentage Negative Instance = {} ".format(percentage_intances[1],percentage_intances[0]))
ViolentCrimesPerPop 0.0 37.261785 1.0 62.738215 dtype: float64 ------------------ Percentage Positive Instance = 62.7382146439318 Percentage Negative Instance = 37.2617853560682
data.columns
Index(['state', 'county', 'community', 'communityname', 'fold', 'population',
'householdsize', 'racepctblack', 'racePctWhite', 'racePctAsian',
...
'LandArea', 'PopDens', 'PctUsePubTrans', 'PolicCars', 'PolicOperBudg',
'LemasPctPolicOnPatr', 'LemasGangUnitDeploy', 'LemasPctOfficDrugUn',
'PolicBudgPerPop', 'ViolentCrimesPerPop'],
dtype='object', length=128)
# Non-predictive Categorical Variables
for col in ['state','county','community','communityname']:
data[col].fillna(0,inplace=True)
(data.isnull().sum()).tail()
LemasPctPolicOnPatr 1675 LemasGangUnitDeploy 1675 LemasPctOfficDrugUn 0 PolicBudgPerPop 1675 ViolentCrimesPerPop 0 dtype: int64
# Filing null value with mean value
data = data.apply(lambda x:x.fillna(x.value_counts().index[0]))
data.head()
| state | county | community | communityname | fold | population | householdsize | racepctblack | racePctWhite | racePctAsian | ... | LandArea | PopDens | PctUsePubTrans | PolicCars | PolicOperBudg | LemasPctPolicOnPatr | LemasGangUnitDeploy | LemasPctOfficDrugUn | PolicBudgPerPop | ViolentCrimesPerPop | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 8 | 0 | 0 | Lakewoodcity | 1 | 0.19 | 0.33 | 0.02 | 0.90 | 0.12 | ... | 0.12 | 0.26 | 0.20 | 0.06 | 0.04 | 0.9 | 0.5 | 0.32 | 0.14 | 1.0 |
| 1 | 53 | 0 | 0 | Tukwilacity | 1 | 0.00 | 0.16 | 0.12 | 0.74 | 0.45 | ... | 0.02 | 0.12 | 0.45 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 | 1.0 |
| 2 | 24 | 0 | 0 | Aberdeentown | 1 | 0.00 | 0.42 | 0.49 | 0.56 | 0.17 | ... | 0.01 | 0.21 | 0.02 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 | 1.0 |
| 3 | 34 | 5 | 81440 | Willingborotownship | 1 | 0.04 | 0.77 | 1.00 | 0.08 | 0.12 | ... | 0.02 | 0.39 | 0.28 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 | 1.0 |
| 4 | 42 | 95 | 6096 | Bethlehemtownship | 1 | 0.01 | 0.55 | 0.02 | 0.95 | 0.09 | ... | 0.04 | 0.09 | 0.02 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 | 0.0 |
5 rows × 128 columns
print("Missing values after Imputing : ", data.isnull().sum().sum())
Missing values after Imputing : 0
data = data.drop(['state','county','community','communityname','fold'],axis=1)
len(data.columns)
123
data.to_csv('data/clean_data.csv', encoding='utf-8')
corr_matrix = data.corr()
fig, ax = plt.subplots(figsize=(50,50))
ax = sns.heatmap(corr_matrix,
annot=True,
linewidths=0.5,
fmt=".2f",
cmap = "YlGnBu");
all_col = data.columns
input_columns = all_col[:-1]
len(input_columns)
122
X = data[input_columns]
Y = data['ViolentCrimesPerPop']
X.head()
| population | householdsize | racepctblack | racePctWhite | racePctAsian | racePctHisp | agePct12t21 | agePct12t29 | agePct16t24 | agePct65up | ... | PolicAveOTWorked | LandArea | PopDens | PctUsePubTrans | PolicCars | PolicOperBudg | LemasPctPolicOnPatr | LemasGangUnitDeploy | LemasPctOfficDrugUn | PolicBudgPerPop | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.19 | 0.33 | 0.02 | 0.90 | 0.12 | 0.17 | 0.34 | 0.47 | 0.29 | 0.32 | ... | 0.29 | 0.12 | 0.26 | 0.20 | 0.06 | 0.04 | 0.9 | 0.5 | 0.32 | 0.14 |
| 1 | 0.00 | 0.16 | 0.12 | 0.74 | 0.45 | 0.07 | 0.26 | 0.59 | 0.35 | 0.27 | ... | 0.19 | 0.02 | 0.12 | 0.45 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 |
| 2 | 0.00 | 0.42 | 0.49 | 0.56 | 0.17 | 0.04 | 0.39 | 0.47 | 0.28 | 0.32 | ... | 0.19 | 0.01 | 0.21 | 0.02 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 |
| 3 | 0.04 | 0.77 | 1.00 | 0.08 | 0.12 | 0.10 | 0.51 | 0.50 | 0.34 | 0.21 | ... | 0.19 | 0.02 | 0.39 | 0.28 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 |
| 4 | 0.01 | 0.55 | 0.02 | 0.95 | 0.09 | 0.05 | 0.38 | 0.38 | 0.23 | 0.36 | ... | 0.19 | 0.04 | 0.09 | 0.02 | 0.02 | 0.02 | 0.84 | 0 | 0.00 | 0.12 |
5 rows × 122 columns
Y.head()
0 1.0 1 1.0 2 1.0 3 1.0 4 0.0 Name: ViolentCrimesPerPop, dtype: float64
Y = Y.values.reshape((Y.shape[0],1))
X = preprocessing.normalize(X)
Y = preprocessing.normalize(Y)
Y = Y.reshape((Y.shape[0],))
from collections import Counter
print(Counter(Y).keys())
print(Counter(Y).values())
dict_keys([1.0, 0.0]) dict_values([1251, 743])
X
array([[0.04108821, 0.07136374, 0.00432508, ..., 0.10812688, 0.0692012 ,
0.03027553],
[0. , 0.03520005, 0.02640004, ..., 0. , 0. ,
0.02640004],
[0. , 0.09842032, 0.11482371, ..., 0. , 0. ,
0.02812009],
...,
[0.03465583, 0.08014161, 0.05414973, ..., 0. , 0.19710503,
0.0606477 ],
[0.0161467 , 0.10293519, 0.01211002, ..., 0. , 0.04440342,
0.03633007],
[0.03685304, 0.14372686, 0.02579713, ..., 0.0921326 , 0.18426521,
0.02395448]])
def train_val_test_split(X, y, train_size, val_size, test_size):
X_train_val, X_test, y_train_val, y_test = train_test_split(X, y, test_size = test_size)
relative_train_size = train_size / (val_size + train_size)
X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val,
train_size = relative_train_size, test_size = 1-relative_train_size)
return X_train, X_val, X_test, y_train, y_val, y_test
X_train, X_val, X_test, y_train, y_val, y_test = train_val_test_split(X, Y, 0.7, 0.1, 0.2)
len(X_train), len(X_val), len(X_test), len(y_train), len(y_val), len(y_test)
(1395, 200, 399, 1395, 200, 399)
# from sklearn.preprocessing import StandardScaler
# ss=StandardScaler()
# X_train=ss.fit_transform(X_train)
# X_test=ss.fit_transform(X_test)
# X_val=ss.fit_transform(X_val)
X_train
array([[0.00201209, 0.11670138, 0.00201209, ..., 0. , 0. ,
0.02414511],
[0.00663772, 0.05973948, 0.03540118, ..., 0. , 0. ,
0.02655088],
[0.00411675, 0.10497717, 0.00617513, ..., 0. , 0. ,
0.02470051],
...,
[0.00624917, 0.1374818 , 0.00624917, ..., 0. , 0. ,
0.02499669],
[0.00208557, 0.12930508, 0.00208557, ..., 0. , 0. ,
0.02502679],
[0.00471498, 0.15559423, 0.02043157, ..., 0. , 0. ,
0.01885991]])
#Creating a pipeline
model = Sequential()
#1st hidden layer with input layer
model.add(Dense(units=500,activation="relu",input_dim=122))
#2nd hidden layer
model.add(Dense(units=300,activation="relu",))
#3rd hidden layer
model.add(Dense(units=100,activation="relu",))
#output layer
model.add(Dense(units=1,activation="sigmoid"))
model.summary()
Model: "sequential_8" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_32 (Dense) (None, 500) 61500 _________________________________________________________________ dense_33 (Dense) (None, 300) 150300 _________________________________________________________________ dense_34 (Dense) (None, 100) 30100 _________________________________________________________________ dense_35 (Dense) (None, 1) 101 ================================================================= Total params: 242,001 Trainable params: 242,001 Non-trainable params: 0 _________________________________________________________________
model.compile(optimizer="adam",loss="binary_crossentropy",metrics=["accuracy"])
model_his=model.fit(X_train,y_train, validation_data=(X_val, y_val), batch_size=16,epochs=100,verbose=1)
Epoch 1/100 88/88 [==============================] - 1s 7ms/step - loss: 0.4896 - accuracy: 0.7391 - val_loss: 0.3887 - val_accuracy: 0.8100 Epoch 2/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3912 - accuracy: 0.8158 - val_loss: 0.4112 - val_accuracy: 0.7800 Epoch 3/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3870 - accuracy: 0.8194 - val_loss: 0.3789 - val_accuracy: 0.8100 Epoch 4/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3651 - accuracy: 0.8272 - val_loss: 0.3925 - val_accuracy: 0.8050 Epoch 5/100 88/88 [==============================] - 0s 6ms/step - loss: 0.3689 - accuracy: 0.8308 - val_loss: 0.3664 - val_accuracy: 0.8350 Epoch 6/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3562 - accuracy: 0.8315 - val_loss: 0.3702 - val_accuracy: 0.8350 Epoch 7/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3480 - accuracy: 0.8387 - val_loss: 0.3570 - val_accuracy: 0.8400 Epoch 8/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3541 - accuracy: 0.8459 - val_loss: 0.3508 - val_accuracy: 0.8400 Epoch 9/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3625 - accuracy: 0.8366 - val_loss: 0.3569 - val_accuracy: 0.8350 Epoch 10/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3379 - accuracy: 0.8452 - val_loss: 0.3573 - val_accuracy: 0.8250 Epoch 11/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3480 - accuracy: 0.8308 - val_loss: 0.4157 - val_accuracy: 0.8000 Epoch 12/100 88/88 [==============================] - 0s 6ms/step - loss: 0.3453 - accuracy: 0.8394 - val_loss: 0.4400 - val_accuracy: 0.8050 Epoch 13/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3438 - accuracy: 0.8387 - val_loss: 0.4112 - val_accuracy: 0.7900 Epoch 14/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3397 - accuracy: 0.8344 - val_loss: 0.3906 - val_accuracy: 0.8200 Epoch 15/100 88/88 [==============================] - 0s 4ms/step - loss: 0.3315 - accuracy: 0.8480 - val_loss: 0.3529 - val_accuracy: 0.8400 Epoch 16/100 88/88 [==============================] - 0s 3ms/step - loss: 0.3339 - accuracy: 0.8437 - val_loss: 0.3543 - val_accuracy: 0.8400 Epoch 17/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3279 - accuracy: 0.8495 - val_loss: 0.3512 - val_accuracy: 0.8400 Epoch 18/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3290 - accuracy: 0.8423 - val_loss: 0.3486 - val_accuracy: 0.8500 Epoch 19/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3271 - accuracy: 0.8437 - val_loss: 0.3543 - val_accuracy: 0.8350 Epoch 20/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3165 - accuracy: 0.8516 - val_loss: 0.3584 - val_accuracy: 0.8400 Epoch 21/100 88/88 [==============================] - 0s 4ms/step - loss: 0.3354 - accuracy: 0.8416 - val_loss: 0.3828 - val_accuracy: 0.8250 Epoch 22/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3150 - accuracy: 0.8444 - val_loss: 0.3587 - val_accuracy: 0.8350 Epoch 23/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3196 - accuracy: 0.8495 - val_loss: 0.4433 - val_accuracy: 0.8150 Epoch 24/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3118 - accuracy: 0.8480 - val_loss: 0.3581 - val_accuracy: 0.8300 Epoch 25/100 88/88 [==============================] - 0s 4ms/step - loss: 0.3323 - accuracy: 0.8480 - val_loss: 0.4168 - val_accuracy: 0.8300 Epoch 26/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3258 - accuracy: 0.8416 - val_loss: 0.4003 - val_accuracy: 0.8350 Epoch 27/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3154 - accuracy: 0.8509 - val_loss: 0.4062 - val_accuracy: 0.8300 Epoch 28/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3024 - accuracy: 0.8545 - val_loss: 0.3960 - val_accuracy: 0.8250 Epoch 29/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3085 - accuracy: 0.8502 - val_loss: 0.3599 - val_accuracy: 0.8350 Epoch 30/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3086 - accuracy: 0.8430 - val_loss: 0.3669 - val_accuracy: 0.8350 Epoch 31/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2929 - accuracy: 0.8588 - val_loss: 0.3806 - val_accuracy: 0.8400 Epoch 32/100 88/88 [==============================] - 0s 5ms/step - loss: 0.3058 - accuracy: 0.8523 - val_loss: 0.4114 - val_accuracy: 0.8300 Epoch 33/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2919 - accuracy: 0.8530 - val_loss: 0.4182 - val_accuracy: 0.8350 Epoch 34/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2968 - accuracy: 0.8538 - val_loss: 0.3743 - val_accuracy: 0.8250 Epoch 35/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2863 - accuracy: 0.8595 - val_loss: 0.4106 - val_accuracy: 0.8350 Epoch 36/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2846 - accuracy: 0.8624 - val_loss: 0.4202 - val_accuracy: 0.8450 Epoch 37/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2892 - accuracy: 0.8566 - val_loss: 0.5367 - val_accuracy: 0.8300 Epoch 38/100 88/88 [==============================] - 1s 6ms/step - loss: 0.3040 - accuracy: 0.8480 - val_loss: 0.4303 - val_accuracy: 0.8300 Epoch 39/100 88/88 [==============================] - 0s 6ms/step - loss: 0.2835 - accuracy: 0.8652 - val_loss: 0.4013 - val_accuracy: 0.8400 Epoch 40/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2794 - accuracy: 0.8638 - val_loss: 0.4582 - val_accuracy: 0.8350 Epoch 41/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2685 - accuracy: 0.8616 - val_loss: 0.4657 - val_accuracy: 0.8250 Epoch 42/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2682 - accuracy: 0.8602 - val_loss: 0.5135 - val_accuracy: 0.8350 Epoch 43/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2833 - accuracy: 0.8545 - val_loss: 0.3944 - val_accuracy: 0.8100 Epoch 44/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2695 - accuracy: 0.8588 - val_loss: 0.4710 - val_accuracy: 0.8050 Epoch 45/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2816 - accuracy: 0.8559 - val_loss: 0.4496 - val_accuracy: 0.8150 Epoch 46/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2557 - accuracy: 0.8738 - val_loss: 0.4982 - val_accuracy: 0.8250 Epoch 47/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2585 - accuracy: 0.8695 - val_loss: 0.6212 - val_accuracy: 0.8200 Epoch 48/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2723 - accuracy: 0.8681 - val_loss: 0.4059 - val_accuracy: 0.8300 Epoch 49/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2489 - accuracy: 0.8746 - val_loss: 0.6066 - val_accuracy: 0.8250 Epoch 50/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2500 - accuracy: 0.8710 - val_loss: 0.4922 - val_accuracy: 0.8300 Epoch 51/100 88/88 [==============================] - 0s 3ms/step - loss: 0.2574 - accuracy: 0.8717 - val_loss: 0.4756 - val_accuracy: 0.8300 Epoch 52/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2317 - accuracy: 0.8824 - val_loss: 0.6394 - val_accuracy: 0.8500 Epoch 53/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2550 - accuracy: 0.8717 - val_loss: 0.4887 - val_accuracy: 0.8250 Epoch 54/100 88/88 [==============================] - 0s 6ms/step - loss: 0.2276 - accuracy: 0.8918 - val_loss: 0.6030 - val_accuracy: 0.8400 Epoch 55/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2402 - accuracy: 0.8796 - val_loss: 0.5038 - val_accuracy: 0.8200 Epoch 56/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2328 - accuracy: 0.8867 - val_loss: 0.5570 - val_accuracy: 0.8200 Epoch 57/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2349 - accuracy: 0.8839 - val_loss: 0.5470 - val_accuracy: 0.8050 Epoch 58/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2275 - accuracy: 0.8910 - val_loss: 0.6889 - val_accuracy: 0.8250 Epoch 59/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2287 - accuracy: 0.8903 - val_loss: 0.5728 - val_accuracy: 0.8250 Epoch 60/100 88/88 [==============================] - 1s 7ms/step - loss: 0.2176 - accuracy: 0.9032 - val_loss: 0.6534 - val_accuracy: 0.8200 Epoch 61/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2084 - accuracy: 0.9039 - val_loss: 0.6086 - val_accuracy: 0.8300 Epoch 62/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2220 - accuracy: 0.8925 - val_loss: 0.5996 - val_accuracy: 0.8150 Epoch 63/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2271 - accuracy: 0.8903 - val_loss: 0.6477 - val_accuracy: 0.8300 Epoch 64/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2099 - accuracy: 0.8961 - val_loss: 0.6047 - val_accuracy: 0.8150 Epoch 65/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2126 - accuracy: 0.9032 - val_loss: 0.7487 - val_accuracy: 0.8100 Epoch 66/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2381 - accuracy: 0.8803 - val_loss: 0.6297 - val_accuracy: 0.8200 Epoch 67/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2034 - accuracy: 0.9061 - val_loss: 0.6093 - val_accuracy: 0.8000 Epoch 68/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1882 - accuracy: 0.9090 - val_loss: 0.7932 - val_accuracy: 0.8050 Epoch 69/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1894 - accuracy: 0.9133 - val_loss: 0.7264 - val_accuracy: 0.8200 Epoch 70/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1795 - accuracy: 0.9168 - val_loss: 0.8564 - val_accuracy: 0.7950 Epoch 71/100 88/88 [==============================] - 0s 5ms/step - loss: 0.2100 - accuracy: 0.9018 - val_loss: 0.7264 - val_accuracy: 0.8300 Epoch 72/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2032 - accuracy: 0.8982 - val_loss: 0.6263 - val_accuracy: 0.7850 Epoch 73/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2475 - accuracy: 0.8853 - val_loss: 0.5125 - val_accuracy: 0.8200 Epoch 74/100 88/88 [==============================] - 0s 4ms/step - loss: 0.2080 - accuracy: 0.9039 - val_loss: 0.6539 - val_accuracy: 0.8150 Epoch 75/100 88/88 [==============================] - 1s 6ms/step - loss: 0.1867 - accuracy: 0.9111 - val_loss: 0.6678 - val_accuracy: 0.8350 Epoch 76/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1720 - accuracy: 0.9254 - val_loss: 0.6959 - val_accuracy: 0.8100 Epoch 77/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1661 - accuracy: 0.9283 - val_loss: 0.7285 - val_accuracy: 0.8150 Epoch 78/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1665 - accuracy: 0.9240 - val_loss: 0.7048 - val_accuracy: 0.8150 Epoch 79/100 88/88 [==============================] - 1s 6ms/step - loss: 0.1734 - accuracy: 0.9226 - val_loss: 0.7252 - val_accuracy: 0.7950 Epoch 80/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1914 - accuracy: 0.9082 - val_loss: 0.7635 - val_accuracy: 0.7900 Epoch 81/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1683 - accuracy: 0.9269 - val_loss: 0.7489 - val_accuracy: 0.8250 Epoch 82/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1532 - accuracy: 0.9297 - val_loss: 0.9919 - val_accuracy: 0.8200 Epoch 83/100 88/88 [==============================] - 1s 6ms/step - loss: 0.2222 - accuracy: 0.8996 - val_loss: 0.7857 - val_accuracy: 0.8100 Epoch 84/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1493 - accuracy: 0.9362 - val_loss: 0.7353 - val_accuracy: 0.8300 Epoch 85/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1443 - accuracy: 0.9376 - val_loss: 0.8307 - val_accuracy: 0.8250 Epoch 86/100 88/88 [==============================] - 0s 6ms/step - loss: 0.1470 - accuracy: 0.9319 - val_loss: 0.9364 - val_accuracy: 0.8100 Epoch 87/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1273 - accuracy: 0.9427 - val_loss: 1.0125 - val_accuracy: 0.7900 Epoch 88/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1860 - accuracy: 0.9161 - val_loss: 0.6843 - val_accuracy: 0.7850 Epoch 89/100 88/88 [==============================] - 0s 3ms/step - loss: 0.1370 - accuracy: 0.9427 - val_loss: 0.9538 - val_accuracy: 0.8200 Epoch 90/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1337 - accuracy: 0.9362 - val_loss: 0.8614 - val_accuracy: 0.7900 Epoch 91/100 88/88 [==============================] - 1s 6ms/step - loss: 0.1467 - accuracy: 0.9405 - val_loss: 0.9644 - val_accuracy: 0.8000 Epoch 92/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1720 - accuracy: 0.9247 - val_loss: 0.7086 - val_accuracy: 0.7750 Epoch 93/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1470 - accuracy: 0.9419 - val_loss: 0.8167 - val_accuracy: 0.8000 Epoch 94/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1345 - accuracy: 0.9448 - val_loss: 0.8788 - val_accuracy: 0.8100 Epoch 95/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1211 - accuracy: 0.9505 - val_loss: 0.9519 - val_accuracy: 0.8200 Epoch 96/100 88/88 [==============================] - 0s 4ms/step - loss: 0.1266 - accuracy: 0.9498 - val_loss: 1.0115 - val_accuracy: 0.8450 Epoch 97/100 88/88 [==============================] - 1s 6ms/step - loss: 0.1249 - accuracy: 0.9513 - val_loss: 0.8444 - val_accuracy: 0.7900 Epoch 98/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1328 - accuracy: 0.9427 - val_loss: 0.8853 - val_accuracy: 0.8050 Epoch 99/100 88/88 [==============================] - 0s 5ms/step - loss: 0.1067 - accuracy: 0.9541 - val_loss: 0.8416 - val_accuracy: 0.7900 Epoch 100/100 88/88 [==============================] - 0s 6ms/step - loss: 0.1171 - accuracy: 0.9491 - val_loss: 0.9918 - val_accuracy: 0.8150
scores = model.evaluate(X_train,y_train, verbose=1)
print(scores)
44/44 [==============================] - 0s 2ms/step - loss: 0.0776 - accuracy: 0.9706 [0.07764449715614319, 0.9706093072891235]
y_pred=model.predict(X_test)
y_pred = (y_pred > 0.45)
score=accuracy_score(y_pred,y_test)
print(score)
0.7819548872180451
conf_matrix = confusion_matrix(y_test, y_pred)
print(conf_matrix)
[[109 34] [ 53 203]]
fig, ax = plt.subplots(figsize=(7.5, 7.5))
ax.matshow(conf_matrix, cmap=plt.cm.Blues, alpha=0.3)
for i in range(conf_matrix.shape[0]):
for j in range(conf_matrix.shape[1]):
ax.text(x=j, y=i,s=conf_matrix[i, j], va='center', ha='center', size='xx-large')
plt.xlabel('Predictions', fontsize=18)
plt.ylabel('Actuals', fontsize=18)
plt.title('Confusion Matrix', fontsize=18)
plt.show()
print(classification_report(y_test,y_pred))
precision recall f1-score support
0.0 0.67 0.76 0.71 143
1.0 0.86 0.79 0.82 256
accuracy 0.78 399
macro avg 0.76 0.78 0.77 399
weighted avg 0.79 0.78 0.78 399
plt.plot(model_his.history['accuracy'])
plt.plot(model_his.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
plt.plot(model_his.history['loss'])
plt.plot(model_his.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
model_json = model.to_json()
with open("Communities_Crime.json", "w") as json_file:
json_file.write(model_json)
model.save_weights("Communities_Crime.h5")